package no.knowit.pages.prosjekt;

import java.util.List;

import no.knowit.entities.Oppdragsgiver;
import no.knowit.entities.Prosjekt;
import no.knowit.entities.Ressurs;
import no.knowit.pages.Index;
import no.knowit.selectModel.OppdragsgiverSelectModel;
import no.knowit.selectModel.RessursSelectModel;

import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class RedigerProsjekt {
	@Property
	private Prosjekt prosjekt;

	@Property
	@Persist
	private RessursSelectModel ressursSelectModel;

	@Property
	@Persist
	private OppdragsgiverSelectModel oppdragsgiverSelectModel;

	@Property
	private Oppdragsgiver oppdragsgiver;

	@Property
	private List<Ressurs> prosjektteam;

	private Long prosjektdataId;

	@Inject
	private Session session;

	// @Inject
	// private Index index;

	@Log
	void onActivate(Long id) {
		if (id != null) {
			hentProsjektdata(id);
			prosjektdataId = id;
		} else {
			prosjekt = new Prosjekt();
		}
		initialiserInputModeller();
	}

	Long onPassivate() {
		return prosjektdataId;
	}

	private void hentProsjektdata(Long id) {
		Criteria criteria = session.createCriteria(Prosjekt.class);
		criteria.add(Restrictions.eq("id", id));
		if (!criteria.list().isEmpty()) {
			prosjekt = (Prosjekt) criteria.list().get(0);
			oppdragsgiver = prosjekt.getOppdragsgiver();
			prosjektteam = prosjekt.getProsjektteam();
		} else {
			throw new RuntimeException("Finner ikke prosjekt med id = " + id);
		}
	}

	@SuppressWarnings("unchecked")
	private void initialiserInputModeller() {
		List<Ressurs> ressurser = session.createCriteria(Ressurs.class).list();
		ressursSelectModel = new RessursSelectModel(ressurser);

		List<Oppdragsgiver> oppdragsgivere = session.createCriteria(
				Oppdragsgiver.class).list();
		oppdragsgiverSelectModel = new OppdragsgiverSelectModel(oppdragsgivere);
	}

	@Log
	@CommitAfter
	Object onSubmitFromFormen() {
		System.out.println("Prosjektid = " + prosjekt.getId());
		prosjekt.setProsjektteam(prosjektteam);
		prosjekt.setOppdragsgiver(oppdragsgiver);
		session.merge(prosjekt);
		System.out.println("Prosjektid = " + prosjekt.getId());

		return Index.class;
	}

	// public Index getIndex() {
	// return index;
	// }
	//
	// public void setIndex(Index index) {
	// this.index = index;
	// }

}
